RandomAccessFile ক্লাস জাভার একটি বিশেষ ক্লাস যা I/O অপারেশন করতে ব্যবহৃত হয়, বিশেষ করে যখন আপনি ফাইলের নির্দিষ্ট স্থানে ডেটা অ্যাক্সেস করতে চান। এটি FileInputStream এবং FileOutputStream এর মতো সাধারণ স্ট্রীম ক্লাসের চেয়ে আরও বেশি কার্যকর, কারণ এটি আপনাকে ফাইলের যেকোনো স্থান থেকে ডেটা পড়তে এবং লিখতে দেয়, অর্থাৎ random access।
RandomAccessFile ক্লাসের মাধ্যমে ফাইলের যেকোনো পজিশনে চলে যেতে পারবেন, পড়তে বা লিখতে পারবেন, এবং এটি binary data এবং text data উভয়ের সাথেই কাজ করতে পারে।
import java.io.RandomAccessFile;
import java.io.IOException;
public class RandomAccessFileExample {
public static void main(String[] args) {
String filePath = "example.txt";
try (RandomAccessFile raf = new RandomAccessFile(filePath, "r")) {
// ফাইলের 10 তম বাইট থেকে শুরু করুন
raf.seek(10);
// ফাইল থেকে 20 বাইট পড়ুন
byte[] bytes = new byte[20];
raf.read(bytes);
// পড়া ডেটা দেখান
System.out.println("Data read from file: " + new String(bytes));
} catch (IOException e) {
e.printStackTrace();
}
}
}
এই কোডটি ফাইলের 10 তম বাইট থেকে ডেটা পড়ে এবং 20 বাইট পর্যন্ত পড়ে।
import java.io.RandomAccessFile;
import java.io.IOException;
public class WriteToFileExample {
public static void main(String[] args) {
String filePath = "example.txt";
try (RandomAccessFile raf = new RandomAccessFile(filePath, "rw")) {
// ফাইলের 10 তম পজিশনে চলে যান
raf.seek(10);
// নির্দিষ্ট পজিশনে কিছু ডেটা লিখুন
raf.write("Hello, Java!".getBytes());
System.out.println("Data written to file successfully.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
এই কোডটি example.txt
ফাইলের 10 তম পজিশনে "Hello, Java!"
লিখবে।
এখানে Tuples ব্যবহার করা হয়েছে, যেখানে ফাইলের নাম এবং তার আকার একটি Pair Tuple এ সংরক্ষণ করা হয়েছে এবং সেই তথ্য RandomAccessFile এর মাধ্যমে ম্যানিপুলেট করা হয়েছে।
import org.javatuples.Pair;
import java.io.RandomAccessFile;
import java.io.IOException;
public class TupleRandomAccessFileExample {
public static void main(String[] args) {
// File name and file size as Tuple
Pair<String, Long> fileInfo = Pair.with("example.txt", 1024L);
try (RandomAccessFile raf = new RandomAccessFile(fileInfo.getValue0(), "rw")) {
// ফাইলের আকার দেখানো
System.out.println("File length: " + fileInfo.getValue1() + " bytes");
// ফাইলের নির্দিষ্ট স্থানে চলে যান (যেমন, 100 তম বাইটে)
raf.seek(100);
// ফাইলে কিছু ডেটা লিখুন
raf.write("Adding some content.".getBytes());
System.out.println("Data written to file successfully.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
এই উদাহরণে, Pair<String, Long>
Tuple ব্যবহার করা হয়েছে যেখানে ফাইলের নাম এবং ফাইলের আকার ধারণ করা হয়েছে। RandomAccessFile
এর মাধ্যমে 100 তম বাইটে কিছু ডেটা লেখা হয়েছে।
seek()
মেথড ব্যবহার করার সময় সঠিক অবস্থানে পৌঁছাতে নিশ্চিত হন, যাতে অপ্রয়োজনীয় I/O অপারেশন এড়ানো যায়।RandomAccessFile জাভাতে একটি শক্তিশালী ক্লাস যা আপনাকে ফাইলের যেকোনো অংশে পৌঁছানোর সুবিধা দেয়। Tuples ব্যবহার করে আপনি ডেটা আরও ভালোভাবে সংগঠিত এবং প্রক্রিয়া করতে পারেন, বিশেষ করে যখন একাধিক ভ্যালু সংরক্ষণ এবং ম্যানিপুলেট করার প্রয়োজন হয়। RandomAccessFile এবং Tuples এর সংমিশ্রণ ফাইল ম্যানিপুলেশনকে আরও দ্রুত, কার্যকরী এবং রিডেবল করে তোলে।
RandomAccessFile
জাভা I/O API-তে একটি গুরুত্বপূর্ণ ক্লাস যা ফাইলের মধ্যে random access এর মাধ্যমে ডেটা পড়া এবং লেখা সম্ভব করে। এটি একটি ফাইলের মধ্যে নির্দিষ্ট স্থানে পয়েন্টার স্থানান্তর করে এবং সেই স্থান থেকে দ্রুত ডেটা পড়তে বা লিখতে সাহায্য করে। RandomAccessFile
ক্লাসটি java.io
প্যাকেজের অংশ এবং এটি read-write মোডে কাজ করতে সক্ষম।
RandomAccessFile
এর ধারণাRandomAccessFile
একটি ফাইলের মধ্যে যে কোনো অবস্থান থেকে ডেটা অ্যাক্সেস করতে পারে, এর মানে হলো আপনি একে একে ফাইলের মধ্যে ডেটা পড়তে বা লেখতে পারবেন, বা নির্দিষ্ট স্থান থেকে ডেটা পুনরুদ্ধার করতে পারবেন। এটি সাধারণ Stream-based I/O এর তুলনায় বেশি কার্যকর এবং দ্রুত, কারণ ফাইলের মাঝখানে থাকা ডেটা এক্সেস করা সম্ভব হয়।
এটি file pointer বা cursor ব্যবহার করে, যার মাধ্যমে ফাইলের নির্দিষ্ট স্থানে চলে যেতে পারেন এবং সেখান থেকে ডেটা পড়তে বা লিখতে পারেন।
RandomAccessFile
এর প্রধান বৈশিষ্ট্য:RandomAccessFile
একটি pointer ব্যবহার করে ফাইলের যেকোনো স্থানে পৌঁছাতে পারে। seek(long pos)
মেথড ব্যবহার করে আপনি পয়েন্টারকে ফাইলের যে কোনো নির্দিষ্ট স্থানে নিয়ে যেতে পারেন।RandomAccessFile
পদ্ধতিগুলি ডেটার বিভিন্ন ধরনের (যেমন readInt()
, writeDouble()
ইত্যাদি) জন্য ডিজাইন করা হয়েছে।RandomAccessFile
এর প্রয়োজনীয়তাRandomAccessFile
অত্যন্ত কার্যকর। এটি sequential reading বা sequential writing এর তুলনায় অনেক দ্রুত এবং বেশি কার্যকর।RandomAccessFile
এর seek() পদ্ধতি ব্যবহার করে দ্রুতভাবে পয়েন্টারকে স্থানান্তর করা যায় এবং সেখান থেকে ডেটা আপডেট করা যায়।RandomAccessFile
ব্যবহার করে আপনি file modification করতে পারেন, যেখানে পুরো ফাইলটি না পড়ে শুধু সংশ্লিষ্ট অংশটুকু পড়ে এবং সেখানে পরিবর্তন করা যায়। এটি খুব কার্যকর যখন বড় ফাইল বা ডেটাবেসের ছোট অংশ আপডেট করতে হয়।RandomAccessFile
ফাইলের যে কোনো অংশে সরাসরি অ্যাক্সেস প্রদান করে, যা InputStream এবং OutputStream এর মাধ্যমে ধারাবাহিকভাবে পড়া বা লেখা করার তুলনায় বেশি কার্যকর।RandomAccessFile
এর মূল মেথডমেথড | ব্যাখ্যা |
---|---|
seek(long pos) | পয়েন্টারকে নির্দিষ্ট অবস্থানে স্থানান্তরিত করে। |
read() | এক বাইট পড়ে। |
readInt() | একটি পূর্ণসংখ্যা (int) পড়ে। |
write(int b) | একটি বাইট লেখে। |
writeInt(int v) | একটি পূর্ণসংখ্যা (int) লেখে। |
getFilePointer() | বর্তমান পয়েন্টারের অবস্থান রিটার্ন করে। |
length() | ফাইলের দৈর্ঘ্য রিটার্ন করে। |
writeUTF(String str) | UTF স্ট্রিং লেখে। |
readUTF() | UTF স্ট্রিং পড়ে। |
RandomAccessFile
ব্যবহার করার উদাহরণimport java.io.RandomAccessFile;
import java.io.IOException;
public class RandomAccessFileExample {
public static void main(String[] args) {
String filePath = "example.txt";
try (RandomAccessFile file = new RandomAccessFile(filePath, "rw")) {
// ফাইলের শুরুতে ডেটা লেখা
file.writeUTF("Hello, World!");
file.writeInt(12345);
file.writeDouble(99.99);
// ফাইল পয়েন্টারকে প্রথমে নিয়ে যাওয়া
file.seek(0);
// প্রথম ডেটা পড়া
String str = file.readUTF();
int num = file.readInt();
double d = file.readDouble();
// পড়া ডেটা প্রদর্শন
System.out.println("String: " + str);
System.out.println("Integer: " + num);
System.out.println("Double: " + d);
} catch (IOException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
RandomAccessFile
ব্যবহার করে প্রথমে ডেটা লেখা হয় এবং পরে পয়েন্টার seek()
মেথড ব্যবহার করে প্রথম অবস্থানে ফিরে আসা হয় এবং ডেটা পড়া হয়।import java.io.RandomAccessFile;
import java.io.IOException;
public class RandomAccessFileSeekExample {
public static void main(String[] args) {
String filePath = "example.txt";
try (RandomAccessFile file = new RandomAccessFile(filePath, "rw")) {
file.writeUTF("Alice");
file.writeInt(25);
file.writeUTF("Bob");
file.writeInt(30);
// Seek to the second entry
file.seek(0); // Move to the beginning of the file
file.readUTF(); // Skip the first name "Alice"
int age = file.readInt(); // Read the second age (Bob's)
System.out.println("Bob's Age: " + age); // Output Bob's age
} catch (IOException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
seek()
ব্যবহার করে আমরা ফাইলের মধ্যে নির্দিষ্ট অবস্থানে চলে গিয়ে read()
এবং write()
অপারেশন করতে পারি। এই উদাহরণে, প্রথম Alice
এর ডেটা পড়ে বাদ দিয়ে দ্বিতীয় Bob
এর তথ্য পড়া হয়েছে।RandomAccessFile
এর ব্যবহারিক সুবিধাRandomAccessFile
ক্লাসটি কার্যকরী।RandomAccessFile
ক্লাসটি একটি শক্তিশালী সরঞ্জাম যা random access ফাইল অ্যাক্সেসের জন্য ব্যবহার করা হয়। এটি জাভাতে ফাইল পড়া এবং লেখা প্রক্রিয়ার জন্য আরো বেশি কার্যকর এবং দ্রুত একটি উপায় প্রদান করে। Tuples বা অন্য যেকোনো ডেটা স্ট্রাকচার ব্যবহার করে RandomAccessFile
এর মাধ্যমে ডেটা ম্যানেজমেন্টকে আরও সুবিধাজনক এবং কার্যকরী করা সম্ভব।
RandomAccessFile
জাভাতে একটি শক্তিশালী ক্লাস যা ফাইলের মধ্যে নির্দিষ্ট অবস্থানে ডেটা পড়া এবং লেখার জন্য ব্যবহৃত হয়। এটি আপনাকে ফাইলের যেকোনো অংশে সরাসরি অ্যাক্সেস করতে দেয়, অর্থাৎ random access।
RandomAccessFile
ফাইলের মধ্যে যে কোনো স্থান থেকে ডেটা পড়তে এবং যে কোনো স্থান থেকে ডেটা লেখার ক্ষমতা প্রদান করে, যা FileInputStream
এবং FileOutputStream
এর চেয়ে অনেক বেশি কার্যকরী।
RandomAccessFile
ক্লাসের বৈশিষ্ট্যr
(read mode): শুধুমাত্র পড়তে পারা।rw
(read-write mode): পড়া এবং লেখা উভয়ই করা যায়।seek()
মেথড ব্যবহার করে আপনি ফাইলের একটি নির্দিষ্ট অবস্থানে চলে যেতে পারেন।RandomAccessFile
ক্লাসের সাধারণ পদ্ধতিপদ্ধতি | বর্ণনা |
---|---|
read() | ফাইল থেকে একটি বাইট পড়ে। |
readInt() | ফাইল থেকে একটি পূর্ণসংখ্যা পড়ে। |
write() | ফাইলে একটি বাইট লেখে। |
writeInt() | ফাইলে একটি পূর্ণসংখ্যা লেখে। |
seek(long pos) | ফাইলের পয়েন্টারকে নির্দিষ্ট অবস্থানে সেট করে। |
getFilePointer() | বর্তমান পয়েন্টারের অবস্থান ফেরত দেয়। |
import java.io.RandomAccessFile;
import java.io.IOException;
public class ReadFromSpecificPosition {
public static void main(String[] args) {
try (RandomAccessFile file = new RandomAccessFile("example.txt", "r")) {
// ফাইলের 10 তম বাইট থেকে পড়া শুরু
file.seek(10);
// 10 তম বাইট থেকে একটি পূর্ণসংখ্যা পড়া
int data = file.readInt();
System.out.println("Data read from position 10: " + data);
} catch (IOException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
seek(10)
: এটি ফাইলের 10 তম বাইটে পয়েন্টার সেট করে। এরপর readInt()
ব্যবহার করে সেখানে একটি পূর্ণসংখ্যা পড়া হয়।import java.io.RandomAccessFile;
import java.io.IOException;
public class WriteToSpecificPosition {
public static void main(String[] args) {
try (RandomAccessFile file = new RandomAccessFile("example.txt", "rw")) {
// ফাইলের 20 তম বাইটে লেখা শুরু
file.seek(20);
// সেখানে একটি পূর্ণসংখ্যা লেখা
file.writeInt(12345);
System.out.println("Data written to position 20.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
seek(20)
: ফাইলের 20 তম অবস্থানে পয়েন্টার সেট করা হয়েছে।writeInt(12345)
: 20 তম অবস্থানে পূর্ণসংখ্যা 12345 লেখা হয়েছে।import java.io.RandomAccessFile;
import java.io.IOException;
public class ReadAndWriteAtTheSameTime {
public static void main(String[] args) {
try (RandomAccessFile file = new RandomAccessFile("example.txt", "rw")) {
// প্রথমে কিছু ডেটা লেখা
file.writeUTF("Hello, this is the first part.");
file.writeInt(100);
// ফাইলের 10 তম বাইটে পয়েন্টার সেট করা
file.seek(10);
// ফাইল থেকে ডেটা পড়া
String readData = file.readUTF();
int number = file.readInt();
System.out.println("Read data: " + readData);
System.out.println("Read number: " + number);
} catch (IOException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
writeUTF()
এবং writeInt()
মেথড ব্যবহার করে কিছু ডেটা লেখা হয়েছে।seek(10)
ব্যবহার করে 10 তম বাইটে পয়েন্টার সেট করা হয়েছে এবং readUTF()
এবং readInt()
দিয়ে ডেটা পড়া হয়েছে।RandomAccessFile
ব্যবহার করার সুবিধাseek()
মেথডের মাধ্যমে ফাইলের নির্দিষ্ট অবস্থানে চলে যাওয়া এবং সেখানে পড়া বা লেখা করা যায়, যা sequential access এর চেয়ে অনেক দ্রুত।RandomAccessFile
বড় ডেটা ফাইল বা ডেটাবেসের মতো অ্যাপ্লিকেশনে ব্যবহৃত হতে পারে যেখানে দ্রুত নির্দিষ্ট অবস্থান থেকে ডেটা পড়া বা লেখা প্রয়োজন।RandomAccessFile
এর কিছু সীমাবদ্ধতাRandomAccessFile
ব্যবহার করার সময় thread safety নিশ্চিত করা জরুরি। একাধিক থ্রেড একই সময়ে একই পয়েন্টারে লিখলে সমস্যা সৃষ্টি হতে পারে।RandomAccessFile
ফাইল থেকে random access সুবিধা প্রদান করে, যেখানে আপনি যেকোনো অবস্থান থেকে ডেটা পড়তে এবং লিখতে পারেন। এটি দ্রুত এবং কার্যকর, বিশেষ করে যখন আপনাকে ফাইলের নির্দিষ্ট অংশে কাজ করতে হয়। Tuples ব্যবহার করে ডেটা পড়া বা লেখার জন্য এই ফিচারটি অনেক বেশি কার্যকরী হতে পারে, কারণ Tuples ডেটাকে খুবই কার্যকরভাবে সংগঠিত এবং ব্যবস্থাপনা করতে সাহায্য করে।
Random Access File হল এমন একটি ফাইল যা একে একে বাইট বা রেকর্ডের মাধ্যমে পড়া এবং লেখা যায়, অর্থাৎ আপনি যে কোনো স্থান থেকে ডেটা পড়তে এবং লিখতে পারেন। RandomAccessFile
ক্লাস জাভায় java.io
প্যাকেজের অংশ এবং এটি ফাইলের যে কোনো স্থানে ডেটা অ্যাক্সেস করতে সাহায্য করে।
RandomAccessFile
ব্যবহার করে আপনি ফাইলের পয়েন্টার সরাতে পারেন এবং নির্দিষ্ট অবস্থান থেকে ডেটা পড়তে বা লিখতে পারেন। এটি ফাইল হ্যান্ডলিংয়ের আরও উন্নত পদ্ধতি যেখানে direct access এবং update এর প্রয়োজন হয়।
RandomAccessFile
ক্লাসের মাধ্যমে ফাইল পয়েন্টারকে নির্দিষ্ট অবস্থানে স্থানান্তর করা যায়।seek()
মেথড ব্যবহার করে পয়েন্টারকে ফাইলের যেকোনো স্থানে স্থানান্তর করতে পারেন এবং তারপরে ডেটা পড়তে বা লিখতে পারেন।RandomAccessFile
ফাইলকে read-write অথবা read-only মোডে খোলার অনুমতি দেয়।RandomAccessFile
ক্লাসের প্রধান মেথডমেথড | ব্যাখ্যা |
---|---|
seek(long pos) | ফাইল পয়েন্টার নির্দিষ্ট অবস্থানে স্থানান্তর করে |
read() | এক বাইট পড়ে |
readInt() | একটি পূর্ণসংখ্যা (int) পড়ে |
write(int b) | একটি বাইট লেখে |
writeInt(int v) | একটি পূর্ণসংখ্যা (int) লেখে |
getFilePointer() | বর্তমান পয়েন্টারের অবস্থান রিটার্ন করে |
length() | ফাইলের দৈর্ঘ্য রিটার্ন করে |
RandomAccessFile
ব্যবহার করার উদাহরণimport java.io.RandomAccessFile;
import java.io.IOException;
public class RandomAccessFileExample {
public static void main(String[] args) {
String filePath = "randomAccessExample.txt";
// ফাইল তৈরি এবং লিখা
try (RandomAccessFile file = new RandomAccessFile(filePath, "rw")) {
// ফাইলের শুরুতে ডেটা লেখা
file.writeUTF("Hello, World!");
file.writeInt(12345);
file.writeDouble(99.99);
// ফাইল পয়েন্টারকে প্রথমে নিয়ে যাওয়া
file.seek(0);
// প্রথম ডেটা পড়া
String str = file.readUTF();
int num = file.readInt();
double d = file.readDouble();
// পড়া ডেটা প্রদর্শন
System.out.println("String: " + str);
System.out.println("Integer: " + num);
System.out.println("Double: " + d);
// ফাইলের মধ্যে নির্দিষ্ট স্থানে লেখার জন্য পয়েন্টার স্থানান্তর করা
file.seek(0); // প্রথমে ফিরে যেতে
file.writeUTF("Updated Data!");
// আপডেটেড ডেটা পড়া
file.seek(0);
str = file.readUTF();
System.out.println("Updated String: " + str);
} catch (IOException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
seek(long pos)
মেথডটি ব্যবহার করে ফাইলের পয়েন্টার নির্দিষ্ট অবস্থানে সেট করা হয়েছে।writeUTF()
এবং writeInt()
মেথড ব্যবহার করে ডেটা লিখা হয়েছে এবং readUTF()
ও readInt()
মেথড ব্যবহার করে ডেটা পড়া হয়েছে।seek()
মেথডের মাধ্যমে ফাইলের পয়েন্টার পুনরায় অবস্থান পরিবর্তন করা হয়েছে, যা ফাইলের নির্দিষ্ট স্থানে পৌঁছাতে সাহায্য করে।যেহেতু Tuples বিভিন্ন ডেটা টাইপ একত্রে সংরক্ষণ করতে সহায়ক, তাই RandomAccessFile এর মাধ্যমে ডেটা পড়ে Tuples এ সংরক্ষণ করা যেতে পারে।
RandomAccessFile
এবং Tuples এর মাধ্যমে ফাইল থেকে ডেটা পড়াimport org.javatuples.Pair;
import java.io.RandomAccessFile;
import java.io.IOException;
public class TupleWithRandomAccessFileExample {
public static void main(String[] args) {
String filePath = "tupleData.txt";
try (RandomAccessFile file = new RandomAccessFile(filePath, "rw")) {
// ফাইলের প্রথমে ডেটা লেখা
file.writeUTF("Alice");
file.writeInt(25);
file.writeUTF("Bob");
file.writeInt(30);
// ফাইল পয়েন্টারকে প্রথমে নিয়ে যাওয়া
file.seek(0);
// Tuples এ ডেটা সংরক্ষণ
Pair<String, Integer> person1 = Pair.with(file.readUTF(), file.readInt());
Pair<String, Integer> person2 = Pair.with(file.readUTF(), file.readInt());
// Tuples এর ডেটা প্রদর্শন
System.out.println("Person 1: " + person1.getValue0() + ", Age: " + person1.getValue1());
System.out.println("Person 2: " + person2.getValue0() + ", Age: " + person2.getValue1());
} catch (IOException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
RandomAccessFile
ব্যবহার করে Person
নামক দুইটি Pair Tuples এ ডেটা সংরক্ষণ করা হয়েছে। আমরা seek()
মেথডের মাধ্যমে ফাইল পয়েন্টারকে বিভিন্ন স্থানে নিয়ে গিয়ে ডেটা পড়ে Tuples এ সংরক্ষণ করেছি।RandomAccessFile
এর সুবিধা এবং সীমাবদ্ধতাRandomAccessFile
শুধুমাত্র primitive ডেটা টাইপ এবং UTF-encoded স্ট্রিং সমর্থন করে, object serialization জন্য এটি উপযুক্ত নয়।IOException
সঠিকভাবে হ্যান্ডেল করুন এবং ফাইলের সাথে কাজ করার সময় চেষ্টা করুন try-with-resources
ব্লক ব্যবহার করতে।seek()
মেথড ব্যবহার করে ফাইল পয়েন্টার সঠিক স্থানে নিয়ে যান।BufferedRandomAccessFile
ব্যবহার করা যেতে পারে, যেখানে BufferedReader/BufferedWriter এর মত বাফারিং ব্যবস্থাপনা করা হয়।RandomAccessFile
ক্লাস জাভাতে ফাইল পরিচালনার একটি শক্তিশালী উপায়, যা random access এবং data modification এর জন্য সহায়ক। Tuples এর সাথে এই ক্লাস ব্যবহার করলে ফাইল থেকে ডেটা দ্রুত পড়া, লেখা এবং স্টোর করা সহজ হয়। seek()
মেথডের মাধ্যমে পয়েন্টার স্থানান্তর করা যায়, যা দ্রুত এবং কার্যকরী ডেটা হ্যান্ডলিং নিশ্চিত করে।
RandomAccessFile
হল একটি বিশেষ ধরনের I/O ক্লাস যা ফাইলের নির্দিষ্ট অবস্থানে সরাসরি ডেটা পড়া এবং লেখা করতে সহায়ক। এটি ফাইলের যে কোন অবস্থান থেকে ডেটা পড়তে এবং সেই অবস্থানে ডেটা লিখতে সক্ষম, যা সাধারণ FileInputStream বা FileOutputStream এর মাধ্যমে সম্ভব নয়। RandomAccessFile ক্লাসটি বাইনারি এবং টেক্সট ফাইলের জন্য কার্যকর।
read()
, write()
মেথড ব্যবহার করে ডেটা পড়া এবং লেখা।seek()
মেথড ব্যবহার করে ফাইলের নির্দিষ্ট অবস্থানে যাওয়া।getFilePointer()
মেথড দ্বারা বর্তমান পজিশন জানা যায় এবং length()
দ্বারা ফাইলের আকার জানা যায়।মেথড | বর্ণনা |
---|---|
seek(long pos) | ফাইলের নির্দিষ্ট পজিশনে যায় (বাইট আকারে)। |
read() | একটি বাইট পড়ে। |
read(byte[] b) | বাফার থেকে একাধিক বাইট পড়ে। |
write(int b) | একটি বাইট লেখে। |
write(byte[] b) | বাফার থেকে একাধিক বাইট লেখে। |
getFilePointer() | বর্তমান পজিশন রিটার্ন করে। |
length() | ফাইলের মোট সাইজ রিটার্ন করে। |
import java.io.RandomAccessFile;
import java.io.IOException;
public class RandomAccessFileExample {
public static void main(String[] args) {
String filePath = "example.dat";
// ফাইল লেখার জন্য
try (RandomAccessFile raf = new RandomAccessFile(filePath, "rw")) {
// কিছু ডেটা লিখি
raf.writeInt(123); // একটি int লিখলাম
raf.writeDouble(3.14159); // একটি double লিখলাম
raf.writeUTF("Hello, World!"); // একটি String লিখলাম
// বর্তমান ফাইল পজিশন প্রিন্ট করা
System.out.println("Current file pointer position: " + raf.getFilePointer());
// নির্দিষ্ট অবস্থানে যাওয়া
raf.seek(0); // প্রথম বাইটের অবস্থানে ফিরে যাই
System.out.println("Reading data after seeking to position 0:");
// ডেটা পড়া
System.out.println("Read int: " + raf.readInt());
System.out.println("Read double: " + raf.readDouble());
System.out.println("Read String: " + raf.readUTF());
} catch (IOException e) {
e.printStackTrace();
}
}
}
ফলস্বরূপ:
Current file pointer position: 22
Reading data after seeking to position 0:
Read int: 123
Read double: 3.14159
Read String: Hello, World!
import java.io.RandomAccessFile;
import java.io.IOException;
public class RandomAccessFileUpdateExample {
public static void main(String[] args) {
String filePath = "example.dat";
// ফাইল লেখার জন্য
try (RandomAccessFile raf = new RandomAccessFile(filePath, "rw")) {
// কিছু ডেটা লিখি
raf.writeInt(123);
raf.writeDouble(3.14159);
raf.writeUTF("Hello");
// ফাইল পজিশনে গিয়ে ডেটা আপডেট করা
raf.seek(4); // ফাইলের দ্বিতীয় ডেটাতে গিয়ে সেটি আপডেট করি
raf.writeInt(456); // int আপডেট
// ফাইল পজিশনে ফিরে যাওয়া
raf.seek(0);
System.out.println("Updated int: " + raf.readInt());
System.out.println("Updated double: " + raf.readDouble());
System.out.println("Updated String: " + raf.readUTF());
} catch (IOException e) {
e.printStackTrace();
}
}
}
ফলস্বরূপ:
Updated int: 456
Updated double: 3.14159
Updated String: Hello
আপনি Java Tuples ব্যবহার করে ফাইলের নাম এবং ফাইলের আকার একত্রে সংরক্ষণ করতে পারেন। এই পদ্ধতিতে একটি Tuple তৈরি করা হয় যা ফাইলের নাম এবং সাইজ সংরক্ষণ করে, যা পরবর্তী পর্যায়ে ব্যবহার করা যেতে পারে।
import org.apache.commons.lang3.tuple.Pair;
import java.io.RandomAccessFile;
import java.io.IOException;
public class TupleRandomAccessFileExample {
public static void main(String[] args) {
String filePath = "example.dat";
// ফাইল লেখা এবং তথ্য একত্রে Tuple এ সংরক্ষণ
Pair<String, Long> fileData = writeFile(filePath);
System.out.println("File Name: " + fileData.getLeft());
System.out.println("File Size: " + fileData.getRight() + " bytes");
// ফাইলের কন্টেন্ট পড়া
readFile(filePath);
}
public static Pair<String, Long> writeFile(String filePath) {
try (RandomAccessFile raf = new RandomAccessFile(filePath, "rw")) {
// কিছু ডেটা লিখি
raf.writeInt(123); // একটি int
raf.writeDouble(3.14159); // একটি double
raf.writeUTF("Hello, World!"); // একটি String
// ফাইলের আকার
long fileSize = raf.length();
// ফাইল নাম এবং আকার Tuple এ সংরক্ষণ
return Pair.of(filePath, fileSize);
} catch (IOException e) {
e.printStackTrace();
}
return Pair.of(filePath, 0L); // ডিফল্ট মান রিটার্ন
}
public static void readFile(String filePath) {
try (RandomAccessFile raf = new RandomAccessFile(filePath, "r")) {
// ডেটা পড়া
System.out.println("Reading data from the file:");
System.out.println("Read int: " + raf.readInt());
System.out.println("Read double: " + raf.readDouble());
System.out.println("Read String: " + raf.readUTF());
} catch (IOException e) {
e.printStackTrace();
}
}
}
ফলস্বরূপ:
File Name: example.dat
File Size: 22 bytes
Reading data from the file:
Read int: 123
Read double: 3.14159
Read String: Hello, World!
RandomAccessFile Java তে খুবই শক্তিশালী টুল, যা ফাইলের নির্দিষ্ট অবস্থান থেকে ডেটা পড়া এবং লেখা করতে সক্ষম। এটি বাইনারি ডেটা ম্যানিপুলেশনের জন্য খুবই কার্যকর এবং Java Tuples ব্যবহার করে আপনি ফাইলের নাম এবং আকার একত্রে সংরক্ষণ করতে পারেন।
Read more